@@ -230,6 +230,19 @@ class Agent < ActiveRecord::Base |
||
| 230 | 230 |
# Class Methods |
| 231 | 231 |
|
| 232 | 232 |
class << self |
| 233 |
+ def build_clone(original) |
|
| 234 |
+ new(original.slice(:type, :options, :schedule, :source_ids, :keep_events_for, :propagate_immediately)) { |clone|
|
|
| 235 |
+ # Give it a unique name |
|
| 236 |
+ 2.upto(count) do |i| |
|
| 237 |
+ name = '%s (%d)' % [original.name, i] |
|
| 238 |
+ unless exists?(name: name) |
|
| 239 |
+ clone.name = name |
|
| 240 |
+ break |
|
| 241 |
+ end |
|
| 242 |
+ end |
|
| 243 |
+ } |
|
| 244 |
+ end |
|
| 245 |
+ |
|
| 233 | 246 |
def cannot_be_scheduled! |
| 234 | 247 |
@cannot_be_scheduled = true |
| 235 | 248 |
end |
@@ -514,6 +514,51 @@ describe Agent do |
||
| 514 | 514 |
end |
| 515 | 515 |
end |
| 516 | 516 |
end |
| 517 |
+ |
|
| 518 |
+ describe "Agent.build_clone" do |
|
| 519 |
+ before do |
|
| 520 |
+ Event.delete_all |
|
| 521 |
+ @sender = Agents::SomethingSource.new( |
|
| 522 |
+ name: 'Agent (2)', |
|
| 523 |
+ options: { foo: 'bar2' },
|
|
| 524 |
+ schedule: '5pm') |
|
| 525 |
+ @sender.user = users(:bob) |
|
| 526 |
+ @sender.save! |
|
| 527 |
+ @sender.create_event :payload => {}
|
|
| 528 |
+ @sender.create_event :payload => {}
|
|
| 529 |
+ @sender.events.count.should == 2 |
|
| 530 |
+ |
|
| 531 |
+ @receiver = Agents::CannotBeScheduled.new( |
|
| 532 |
+ name: 'Agent', |
|
| 533 |
+ options: { foo: 'bar3' },
|
|
| 534 |
+ keep_events_for: 3, |
|
| 535 |
+ propagate_immediately: true) |
|
| 536 |
+ @receiver.user = users(:bob) |
|
| 537 |
+ @receiver.sources << @sender |
|
| 538 |
+ @receiver.memory[:test] = 1 |
|
| 539 |
+ @receiver.save! |
|
| 540 |
+ end |
|
| 541 |
+ |
|
| 542 |
+ it "should create a clone of a given agent for editing" do |
|
| 543 |
+ sender_clone = users(:bob).agents.build_clone(@sender) |
|
| 544 |
+ |
|
| 545 |
+ sender_clone.attributes.should == Agent.new.attributes. |
|
| 546 |
+ update(@sender.slice(:user_id, :type, |
|
| 547 |
+ :options, :schedule, :keep_events_for, :propagate_immediately)). |
|
| 548 |
+ update('name' => 'Agent (2) (2)', 'options' => { 'foo' => 'bar2' })
|
|
| 549 |
+ |
|
| 550 |
+ sender_clone.source_ids.should == [] |
|
| 551 |
+ |
|
| 552 |
+ receiver_clone = users(:bob).agents.build_clone(@receiver) |
|
| 553 |
+ |
|
| 554 |
+ receiver_clone.attributes.should == Agent.new.attributes. |
|
| 555 |
+ update(@receiver.slice(:user_id, :type, |
|
| 556 |
+ :options, :schedule, :keep_events_for, :propagate_immediately)). |
|
| 557 |
+ update('name' => 'Agent (3)', 'options' => { 'foo' => 'bar3' })
|
|
| 558 |
+ |
|
| 559 |
+ receiver_clone.source_ids.should == [@sender.id] |
|
| 560 |
+ end |
|
| 561 |
+ end |
|
| 517 | 562 |
end |
| 518 | 563 |
|
| 519 | 564 |
describe ".trigger_web_request" do |